package com.ly.erms.modular.system.controller;

import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;


import com.google.code.kaptcha.Constants;
import com.google.code.kaptcha.Producer;
import com.ly.erms.config.properties.ErmsProperties;
import com.ly.erms.core.util.FileUtil;

/**
 * 验证码控制器
 * @author liuyang
 * @date 2018年1月3日
 */
@Controller
@RequestMapping("/kaptcha")
public class KaptchaController {

	@Resource
	private ErmsProperties ermsProperties;

	@Autowired
	Producer producer;

	/**
	 * 生成验证码
	 */
	@RequestMapping("")
	public void index(HttpServletRequest request, HttpServletResponse response) {
		HttpSession session = request.getSession();

		response.setDateHeader("Expires", 0);

		// Set standard HTTP/1.1 no-cache headers.
		response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");

		// Set IE extended HTTP/1.1 no-cache headers (use addHeader).
		response.addHeader("Cache-Control", "post-check=0, pre-check=0");

		// Set standard HTTP/1.0 no-cache header.
		response.setHeader("Pragma", "no-cache");

		// return a jpeg
		response.setContentType("image/jpeg");

		// create the text for the image
		String capText = producer.createText();

		// store the text in the session
		session.setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);

		// create the image with the text
		BufferedImage bi = producer.createImage(capText);
		ServletOutputStream out = null;
		try {
			out = response.getOutputStream();
		} catch (IOException e) {
			e.printStackTrace();
		}

		// write the data out
		try {
			ImageIO.write(bi, "jpg", out);
		} catch (IOException e) {
			e.printStackTrace();
		}
		try {
			try {
				out.flush();
			} catch (IOException e) {
				e.printStackTrace();
			}
		} finally {
			try {
				out.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * 返回图片
	 */
	@RequestMapping("/{pictureId}")
	public void renderPicture(@PathVariable("pictureId") String pictureId, HttpServletResponse response) {
		String path = ermsProperties.getFileUploadPath() + pictureId + ".jpg";

		try {
			byte[] bytes = FileUtil.toByteArray(path);
			response.getOutputStream().write(bytes);
		} catch (Exception e) {
			// 找不到图片就返回一个默认图片
			try {
				response.sendRedirect("/static/img/girl.gif");
			} catch (IOException e1) {
				e1.printStackTrace();
			}
			e.printStackTrace();
		}
	}

}
